// ==========================================================================
// Copyright (C) 1995 - 2006 Autodesk, Inc. and/or its licensors.  All 
// rights reserved.
//
// The coded instructions, statements, computer programs, and/or related 
// material (collectively the "Data") in these files contain unpublished 
// information proprietary to Autodesk, Inc. ("Autodesk") and/or its 
// licensors, which is protected by U.S. and Canadian federal copyright 
// law and by international treaties.
//
// The Data is provided for use exclusively by You. You have the right 
// to use, modify, and incorporate this Data into other products for 
// purposes authorized by the Autodesk software license agreement, 
// without fee.
//
// The copyright notices in the Software and this entire statement, 
// including the above license grant, this restriction and the 
// following disclaimer, must be included in all copies of the 
// Software, in whole or in part, and all derivative works of 
// the Software, unless such copies or derivative works are solely 
// in the form of machine-executable object code generated by a 
// source language processor.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. 
// AUTODESK DOES NOT MAKE AND HEREBY DISCLAIMS ANY EXPRESS OR IMPLIED 
// WARRANTIES INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF 
// NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR 
// PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE, OR 
// TRADE PRACTICE. IN NO EVENT WILL AUTODESK AND/OR ITS LICENSORS 
// BE LIABLE FOR ANY LOST REVENUES, DATA, OR PROFITS, OR SPECIAL, 
// DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES, EVEN IF AUTODESK 
// AND/OR ITS LICENSORS HAS BEEN ADVISED OF THE POSSIBILITY 
// OR PROBABILITY OF SUCH DAMAGES.
//
// ==========================================================================

// MELCommand.h : Declaration of the CMELCommand

#pragma once
#include "resource.h"       // main symbols

#include "MayaCmdCOM.h"


// CMELCommand

class ATL_NO_VTABLE CMELCommand : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public CComCoClass<CMELCommand, &CLSID_MELCommand>,
	public IDispatchImpl<IMELCommand, &IID_IMELCommand, &LIBID_MayaCommandEngine, /*wMajor =*/ 1, /*wMinor =*/ 0>,
	public ISupportErrorInfoImpl<&IID_IMELCommand>
{
private:
	CAtlString m_strPortName;
	CAtlString m_strResult;
	SOCKET m_socket;

	static CComVariant MakeVariant(const CAtlString& strText);
	static CComVariant MakeVariantNotArray(const CAtlString& strText);

public:
	CMELCommand()
	{
		m_strPortName = L"commandportDefault";
		m_socket = INVALID_SOCKET;
	}

DECLARE_REGISTRY_RESOURCEID(IDR_MELCOMMAND)


BEGIN_COM_MAP(CMELCommand)
	COM_INTERFACE_ENTRY(IMELCommand)
	COM_INTERFACE_ENTRY(IDispatch)
	COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()


	DECLARE_PROTECT_FINAL_CONSTRUCT()

	HRESULT FinalConstruct()
	{
		return S_OK;
	}
	
	void FinalRelease() 
	{
		Disconnect();
	}

public:

	STDMETHOD(Execute)(BSTR Command);
	STDMETHOD(get_Result)(VARIANT* pVal);
	STDMETHOD(get_PortName)(BSTR* pVal);
	STDMETHOD(put_PortName)(BSTR newVal);
	STDMETHOD(Connect)(void);
	STDMETHOD(Disconnect)(void);
	STDMETHOD(get_Connected)(VARIANT_BOOL* pVal);
};

OBJECT_ENTRY_AUTO(__uuidof(MELCommand), CMELCommand)
